# NewsPaper
<h3>
Module no.16.4<br>
Homework
</h3>
    <h2>Ваши настройки логирования должны выполнять следующее:</h2>
        <ul>
            <li>В консоль должны выводиться все сообщения уровня <code>DEBUG</code> и выше, включающие время, уровень сообщения, сообщения. Для сообщений <code>WARNING</code> и выше дополнительно должен выводиться путь к источнику события (используется аргумент <code>pathname</code> в форматировании). А для сообщений <code>ERROR</code> и <code>CRITICAL</code> еще должен выводить стэк ошибки (аргумент <code>exc_info</code>). Сюда должны попадать все сообщения с основного логгера <code>django</code>.</li>
            <li>В файл <em>general.log</em> должны выводиться сообщения уровня <code>INFO</code> и выше только с указанием времени, уровня логирования, модуля, в котором возникло сообщение (аргумент <code>module</code>) и само сообщение. Сюда также попадают сообщения с регистратора <code>django</code>.</li>
            <li>В файл <em>errors.log</em> должны выводиться сообщения только уровня <code>ERROR</code> и <code>CRITICAL</code>. В сообщении указывается время, уровень логирования, само сообщение, путь к источнику сообщения и стэк ошибки. В этот файл должны попадать сообщения только из логгеров <code>django.request</code>, <code>django.server</code>, <code>django.template</code>, <code>django.db.backends</code>.</li>
            <li>В файл <em>security.log</em> должны попадать только сообщения, связанные с безопасностью, а значит только из логгера <code>django.security</code>. Формат вывода предполагает время, уровень логирования, модуль и сообщение.</li>
            <li>На почту должны отправляться сообщения уровней <code> ERROR</code> и выше из <code>django.request</code> и <code>django.server</code>&nbsp;по формату, как в <em>errors.log</em>, но без стэка ошибок.</li>
        </ul>
        <p>Более того, при помощи фильтров нужно указать, что в консоль сообщения отправляются только при <code>DEBUG = True</code>, а на почту и в файл <em>general.log</em>&nbsp;— только при <code>DEBUG = False</code>.
<h3>
Module no.11.3<br>
Homework
</h3>
    <h2>Дополните свой новостной портал:</h2>
        <ul>
            <li>Добавьте кэширование на страницы с новостями (по 5 минут на каждую) и на главную страницу (одну минуту).</li>
            <li>В шаблонах постарайтесь кэшировать все навигационные элементы (меню, сайдбары и т. д.). Количество кэшируемого времени остаётся на ваше усмотрение. Кроме того, можете использовать любую систему кэширования, какая вам более по нраву.</li>
        </ul>
<h3>
Module no.10.5.1<br>
Homework
</h3>
    <h2>Продолжаем работать над проектом новостного приложения. В этом модуле мы, конечно же, добавим работу с асинхронными запросами. Для успешного выполнения этого итогового задания модуля вам необходимо:</h2>
        <ul>
            <li>Установить <em>Redis.</em></li>
            <li>Установить <em>Celery.</em></li>
            <li>Произвести необходимые конфигурации <em>Django</em> для соединения всех компонентов системы.</li>
            <li>Реализовать рассылку уведомлений подписчикам после создания новости.</li>
            <li>Реализовать еженедельную рассылку с последними новостями (каждый понедельник в 8:00 утра).</li>
        </ul>
<h3>
Module no.9.5.4<br>
Homework
</h3>
    <h2>По итогу работы в модуле вы должны были усовершенствовать ваше новостное приложение:</h2>
        <ul>
            <li>В категории должна быть возможность пользователей&nbsp;подписываться на рассылку новых статей в этой категории.</li>
            <li>Если пользователь подписан на какую-либо категорию, то, как только в неё добавляется новая статья, её краткое содержание приходит пользователю на электронную почту, которую он указал при регистрации. В письме обязательно должна быть гиперссылка на саму статью, чтобы он мог по клику перейти и прочитать её.</li>
            <li>Если пользователь подписан на какую-либо категорию, то каждую неделю ему приходит на почту список новых статей, появившийся за неделю с гиперссылкой на них, чтобы пользователь мог перейти и прочесть любую из статей.</li>
            <li>Добавьте приветственное письмо пользователю при регистрации в приложении.</li>
        </ul>
<h3>
Module no.8.6.2<br>
Homework
</h3>
    <h2>Все действия, которые вы должны выполнить для модификации приложения:</h2>
        <ul>
            <li>В классе-представлении редактирования профиля добавить проверку аутентификации.</li>
            <li>Выполнить необходимые настройки пакета <em>allauth</em> в файле конфигурации.</li>
            <li>В файле конфигурации определить адрес для перенаправления на страницу входа в систему и адрес перенаправления после успешного входа.</li>
            <li>Реализовать&nbsp;шаблон с формой входа в систему и выполнить настройку конфигурации <em>URL.</em></li>
            <li>Реализовать шаблон страницы регистрации пользователей.</li>
            <li>Реализовать&nbsp;возможность регистрации через <em>Google</em>-аккаунт.</li>
            <li>Создать группы <em>common</em> и <em>authors</em>.</li>
            <li>Реализовать автоматическое добавление новых пользователей в группу <em>common.</em></li>
            <li>Создать возможность стать автором (быть добавленным в группу <em>authors).</em></li>
            <li>Для группы <em>authors</em> предоставить права создания и редактирования объектов модели <em>Post</em> (новостей и статей).</li>
            <li>В классах-представлениях добавления и редактирования новостей и статей добавить проверку прав доступа.</li>
            <li>Исходный код залить в <em>git</em>-репозиторий.</li>
        </ul>
<h3>
Module no.7.7<br>
Homework
</h3>
    <h2>Фильтры и пагинация</h2>
        <p>
            Добавьте постраничный вывод на /news/, чтобы на одной странице было не больше 10 новостей и были видны 
номера лишь ближайших страниц, а также возможность перехода к первой или последней странице.<br>
            Добавьте страницу /news/search. На ней должна быть реализована возможность искать новости по определённым критериям.
            Критерии должны быть следующие:
        <ul>
            <li>по названию</li>
            <li>по имени автора</li>
            <li>позже указываемой даты</li>
        </ul>
            Убедитесь, что можно выполнить фильтрацию сразу по нескольким критериям.
    <h2>Создание, редактирование и удаление объектов</h2>
        <p>
            Запрограммируйте страницы создания, редактирования и удаления новостей и статей. Предлагаем вам расположить страницы по следующим ссылкам: 
        <ul>
            <li>/news/create/</li>
            <li>/news/&gt;int:pk&lt;/edit/</li>
            <li>/news/&gt;int:pk&lt;/delete/</li>
            <li>/articles/create/</li>
            <li>/articles/&gt;int:pk&lt;/edit/</li>
            <li>/articles/&gt;int:pk&lt;/delete/</li>
        </ul>
<h3>
Module no.6.6<br>
Homework
</h3>
<h1>Что входит в задание:</h1>
    <p>
        <ul>
            <li>Создать новую страницу с адресом /news/, на которой должен выводиться список всех новостей.</li>
            <li>Вывести все статьи в виде заголовка, даты публикации и первых 20 символов текста.</li>
            <li>Новости должны выводиться в порядке от более свежей к самой старой.</li>
            <li>Сделать отдельную страницу для полной информации о статье /news/&lt;id новости&gt;.</li>
            <li>На этой странице должна быть вся информация о статье. Название, текст и дата загрузки в формате день.месяц.год.</li>
            <li>Написать собственный фильтр censor, который заменяет буквы нежелательных слов в заголовках и текстах статей на символ «*».</li>
            <li>Все новые страницы должны использовать шаблон default.html как основу.</li>
        </ul>
<h3>
Module no.5.9<br>
Homework
</h3>
<h1>Что входит в задание:</h1>
        <h2>Модель Author</h2>
        <h4>Модель, содержащая объекты всех авторов.</h4>
          <p>Имеет следующие поля:
            <ul>
                <li>cвязь «один к одному» с встроенной моделью пользователей User;</li>
                <li>рейтинг пользователя. Ниже будет дано описание того, как этот рейтинг можно посчитать.</li>
            </ul>
        <h2>Модель Category</h2>
        <h4>Категории новостей/статей — темы, которые они отражают (спорт, политика, образование и т. д.).</h4>
          <p>Имеет единственное поле:
            <ul>
                <li>название категории. Поле должно быть уникальным (в определении поля необходимо написать параметр unique = True).</li>
            </ul>
        <h2>Модель Post</h2>
        <h4>Эта модель должна содержать в себе статьи и новости, которые создают пользователи. Каждый объект может иметь одну или несколько категорий.</h4>
          <p>Соответственно, модель должна включать следующие поля:
            <ul>
                <li>связь «один ко многим» с моделью Author;</li>
                <li>поле с выбором — «статья» или «новость»;</li>
                <li>автоматически добавляемая дата и время создания;</li>
                <li>связь «многие ко многим» с моделью Category (с дополнительной моделью PostCategory);</li>
                <li>заголовок статьи/новости;</li>
                <li>текст статьи/новости;</li>
                <li>рейтинг статьи/новости.</li>
            </ul>
        <h2>Модель PostCategory</h2>
        <h4>Промежуточная модель для связи «многие ко многим»:</h4>
          <p>
            <ul>
                <li>связь «один ко многим» с моделью Post;</li>
                <li>связь «один ко многим» с моделью Category.</li>
            </ul>
        <h2>Модель Comment</h2>
        <h4>Под каждой новостью/статьёй можно оставлять комментарии, поэтому необходимо организовать их способ хранения тоже.</h4>
          <p>Модель будет иметь следующие поля:
            <ul>
                <li>связь «один ко многим» с моделью Post;</li>
                <li>связь «один ко многим» со встроенной моделью User (комментарии может оставить любой пользователь, необязательно автор);</li>
                <li>текст комментария;</li>
                <li>дата и время создания комментария;</li>
                <li>рейтинг комментария.</li>
            </ul>
